1fabda2d316ebed24e73ea5ef0232909b7e2ae7c,src/org/exist/xquery/functions/FunInScopePrefixes.java,FunInScopePrefixes,eval,#Sequence[]#Sequence#,43

Before Change


			Node node = nodeValue.getNode();
			if (context.preserveNamespaces()) {
				//Horrible hacks to work-around bad in-scope NS
				if (node.getNodeType() == Node.ELEMENT_NODE && !context.inheritNamespaces()) {
					collectNamespacePrefixes((ElementImpl)node, prefixes);
				} else {
					do {
						collectNamespacePrefixes((ElementImpl)node, prefixes);

After Change


                context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT SEQUENCE", contextSequence);
        }
        
		Map prefixes = new LinkedHashMap();
		NodeValue nodeValue = (NodeValue) args[0].itemAt(0);		
		if (nodeValue.getImplementationType() == NodeValue.PERSISTENT_NODE) {
			//NodeProxy proxy = (NodeProxy) node;
			Node node = nodeValue.getNode();
			if (context.preserveNamespaces()) {
				//Horrible hacks to work-around bad in-scope NS : we reconstruct a NS context !
				if (context.inheritNamespaces()) {
					//Grab ancestors' NS
					do {
						collectNamespacePrefixes((ElementImpl)node, prefixes);
						node = node.getParentNode();
					} while (node != null && node.getNodeType() == Node.ELEMENT_NODE);				
					/*
					NodeSet ancestors = nodeValue.getAncestors(contextId, true);
					for (Iterator i = ancestors.iterator(); i.hasNext(); ) {
						proxy = (NodeProxy) i.next();
						collectNamespacePrefixes((ElementImpl)node, prefixes);
					}
					*/
				} else {
					//Grab self's NS
					if (node.getNodeType() == Node.ELEMENT_NODE)
						collectNamespacePrefixes((ElementImpl)node, prefixes);
				}
			} else {
				//untested : copied from below